﻿#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>

//	写一个宏，可以将一个整数的二进制位的奇数位和偶数位交换。
#define SWAP(n) ((0xaaaaaaaa & n)>>1) | ((0x55555555 & n)<<1)

int main()
{
	int a = 0x11221122;
	//	00010001 00100010 00010001 00100010
	//取出二进制（从左到右）的奇数位
	//  10101010 10101010 10101010 10101010
	// &00010001 00100010 00010001 00100010
	//  00000000 00100010 00000000 00100010
	int j = 0xaaaaaaaa & a;
	//取出二进制（从左到右）的偶数位
	//  01010101 01010101 01010101 01010101
	// &00010001 00100010 00010001 00100010
	//  00010001 00000000 00010001 00000000
	int o = 0x55555555 & a;
	// 将奇数位向右移一位
	j >>= 1;
	//00000000 00010001 00000000 00010001
	// 将偶数位向左移一位
	o <<= 1;
	//00100010 00000000 00100010 00000000
	// 合并 j|o 
	//00100010 00010001 00100010 00010001
	a = j | o;
	printf("%x\n", a);

	//将其封装为宏
	int b = 0x11221122;
	int num = SWAP(b);
	printf("%x\n", num);

	return 0;
}